package fr.afcepf.ai89.esharing.metier;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import fr.afcepf.ai89.esharing.data.IDAOAem;
import fr.afcepf.ai89.esharing.data.IDAOAvis;
import fr.afcepf.ai89.esharing.data.IDAOEmprunt;
import fr.afcepf.ai89.esharing.data.IDAOImgProprietaire;
import fr.afcepf.ai89.esharing.data.IDAOMessagePrive;
import fr.afcepf.ai89.esharing.data.IDAOProprietaire;
import fr.afcepf.ai89.esharing.data.IDAOValeur;
import fr.afcepf.ai89.esharing.entity.Aem;
import fr.afcepf.ai89.esharing.entity.Avis;
import fr.afcepf.ai89.esharing.entity.CategorieAem;
import fr.afcepf.ai89.esharing.entity.Emprunt;
import fr.afcepf.ai89.esharing.entity.FrCommune;
import fr.afcepf.ai89.esharing.entity.FrDepartement;
import fr.afcepf.ai89.esharing.entity.FrRegion;
import fr.afcepf.ai89.esharing.entity.ImgProprietaire;
import fr.afcepf.ai89.esharing.entity.Marque;
import fr.afcepf.ai89.esharing.entity.Proprietaire;
import fr.afcepf.ai89.esharing.entity.TypeAem;
import fr.afcepf.ai89.esharing.entity.Valeur;

public class BusinessRechercheAem implements IBusinessRechercheAem {

	
	@Override
	public List<Aem> rechercherAems(String[] motsCles, FrRegion region,
			FrDepartement dept, FrCommune commune, Long codePostal,
			Date dateDebut, Date dateFin, CategorieAem categorie,
			Valeur valeur) {
		
		List<Aem> listeAemsRecherche = new ArrayList<Aem>();
		
		try {
			
			Context ctx;
			ctx = new InitialContext();
			IDAOAem proxyDataAem = null;
			
			try {
				
				proxyDataAem = (IDAOAem)ctx.lookup("java:global/ESharingPhase1/DAOAem!fr.afcepf.ai89.esharing.data.IDAOAem");
				
			}
			catch (Exception e) {
				
				proxyDataAem = (IDAOAem)ctx.lookup("ESharingPhase1/DAOAem!fr.afcepf.ai89.esharing.data.IDAOAem");
				
			}
		
		listeAemsRecherche = proxyDataAem.getAems(motsCles, region, dept, commune, codePostal, dateDebut, dateFin, categorie, valeur);
		
		}
		catch(NamingException e) {
			
			e.printStackTrace();
			
		}
		
		return listeAemsRecherche;
	
	}
	
	@Override
	public Aem getFicheAem(int idAem) {
		Aem ficheAem = new Aem();
		List<Valeur> sesValeurs = new ArrayList<Valeur>();
		try {
			Context ctx;
			ctx = new InitialContext();
			IDAOAem proxyFicheAem = null;
			IDAOValeur proxyFicheValeur = null;
			
			try {
				proxyFicheAem = (IDAOAem)ctx.lookup("java:global/ESharingPhase1/DAOAem!fr.afcepf.ai89.esharing.data.IDAOAem");
				proxyFicheValeur = (IDAOValeur)ctx.lookup("java:global/ESharingPhase1/DAOValeur!fr.afcepf.ai89.esharing.data.IDAOValeur");
			}
			catch (Exception e) {
				proxyFicheAem = (IDAOAem)ctx.lookup("ESharingPhase1/DAOAem!fr.afcepf.ai89.esharing.data.IDAOAem");
				proxyFicheValeur = (IDAOValeur)ctx.lookup("ESharingPhase1/DAOValeur!fr.afcepf.ai89.esharing.data.IDAOValeur");
			}
		ficheAem = proxyFicheAem.getAem(idAem);
		sesValeurs = proxyFicheValeur.getValeurs(ficheAem);
		ficheAem.setValeurs(sesValeurs);
		}
		catch(NamingException e) {
			e.printStackTrace();
		}
		return ficheAem;
	}

	@Override
	public Proprietaire getFicheProprietaire(int idProprietaire) {
		Proprietaire ficheProp = new Proprietaire();
		List<Aem> lesAems = new ArrayList<Aem>();
		List<ImgProprietaire> imgProp = new ArrayList<ImgProprietaire>();
		try {	
			Context ctx;
			ctx = new InitialContext();
			IDAOProprietaire proxyFicheProp = null;
			IDAOAem proxyFicheAem = null;
			IDAOImgProprietaire proxyImgProp= null;
		try {
			proxyFicheAem = (IDAOAem)ctx.lookup("java:global/ESharingPhase1/DAOAem!fr.afcepf.ai89.esharing.data.IDAOAem");
			proxyFicheProp = (IDAOProprietaire)ctx.lookup("java:global/ESharingPhase1/DAOProprietaire!fr.afcepf.ai89.esharing.data.IDAOProprietaire");
			proxyImgProp = (IDAOImgProprietaire)ctx.lookup("java:global/ESharingPhase1/DAOImgProprietaire!fr.afcepf.ai89.esharing.data.IDAOImgProprietaire");
		}
		catch (Exception e) {
			proxyFicheAem = (IDAOAem)ctx.lookup("ESharingPhase1/DAOAem!fr.afcepf.ai89.esharing.data.IDAOAem");
			proxyFicheProp = (IDAOProprietaire)ctx.lookup("ESharingPhase1/DAOProprietaire!fr.afcepf.ai89.esharing.data.IDAOProprietaire");
			proxyImgProp = (IDAOImgProprietaire)ctx.lookup("ESharingPhase1/DAOImgProprietaire!fr.afcepf.ai89.esharing.data.IDAOImgProprietaire");
		}
		ficheProp = proxyFicheProp.getProp(idProprietaire);
		lesAems = proxyFicheAem.getAems(ficheProp);
		imgProp = proxyImgProp.getImgsProps(ficheProp);
		
		ficheProp.setAems(lesAems);
		ficheProp.setImgProprietaires(imgProp);
		}
		catch(NamingException e) {
			e.printStackTrace();
		}
	return ficheProp;		
	}

	@Override
	public List<Avis> getAvisEmprunteur(Aem aem) {
		
		List<Avis> listeAvis = new ArrayList<Avis>();
		List<Emprunt> listeEmprunts = new ArrayList<Emprunt>();
		
		try {
			
			Context ctx;
			ctx = new InitialContext();
			IDAOAvis proxyDataAvis = null;
			IDAOEmprunt proxyDataEmp = null;
			
			try {
				
				proxyDataAvis = (IDAOAvis)ctx.lookup("java:global/ESharingPhase1/DAOAvis!fr.afcepf.ai89.esharing.data.IDAOAvis");
				proxyDataEmp = (IDAOEmprunt)ctx.lookup("java:global/ESharingPhase1/DAOEmprunt!fr.afcepf.ai89.esharing.data.IDAOEmprunt");
				
			}
			catch (Exception e) {
				
				proxyDataAvis = (IDAOAvis)ctx.lookup("ESharingPhase1/DAOAvis!fr.afcepf.ai89.esharing.data.IDAOAvis");
				proxyDataEmp = (IDAOEmprunt)ctx.lookup("ESharingPhase1/DAOEmprunt!fr.afcepf.ai89.esharing.data.IDAOEmprunt");
				
			}
			
			listeEmprunts = proxyDataEmp.getEmprunts(aem);
			
			for (Emprunt e : listeEmprunts) {
				
				Avis cetAvis = proxyDataAvis.getAvis(e.getAvisSurPreteur().getIdAvis());
				listeAvis.add(cetAvis);
				
			}
		
		}
		catch(NamingException e) {
			
			e.printStackTrace();
			
		}
		
		return listeAvis;
	
	}

	@Override
	public List<Avis> getAvisEmprunteur(Proprietaire prop) {
		
		List<Avis> listeAvis = new ArrayList<Avis>();
		List<Emprunt> listeEmprunts = new ArrayList<Emprunt>();
		
		
		try {
			
			Context ctx;
			ctx = new InitialContext();
			IDAOAvis proxyDataAvis = null;
			IDAOEmprunt proxyDataEmp = null;
			
			try {
				
				proxyDataAvis = (IDAOAvis)ctx.lookup("java:global/ESharingPhase1/DAOAvis!fr.afcepf.ai89.esharing.data.IDAOAvis");
				proxyDataEmp = (IDAOEmprunt)ctx.lookup("java:global/ESharingPhase1/DAOEmprunt!fr.afcepf.ai89.esharing.data.IDAOEmprunt");
				
			}
			catch (Exception e) {
				
				proxyDataAvis = (IDAOAvis)ctx.lookup("ESharingPhase1/DAOAvis!fr.afcepf.ai89.esharing.data.IDAOAvis");
				proxyDataEmp = (IDAOEmprunt)ctx.lookup("ESharingPhase1/DAOEmprunt!fr.afcepf.ai89.esharing.data.IDAOEmprunt");
				
			}
			
			listeEmprunts = proxyDataEmp.getPrets(prop);
			
			for (Emprunt e : listeEmprunts) {
				
				Avis cetAvis = proxyDataAvis.getAvis(e.getAvisSurPreteur().getIdAvis());
				listeAvis.add(cetAvis);
				
			}
		
		}
		catch(NamingException e) {
			
			e.printStackTrace();
			
		}
		
		return listeAvis;
	
	}

	@Override
	public List<Avis> getAvisPreteur(Proprietaire prop) {
		
		List<Avis> listeAvis = new ArrayList<Avis>();
		List<Emprunt> listeEmprunts = new ArrayList<Emprunt>();
		
		
		try {
			
			Context ctx;
			ctx = new InitialContext();
			IDAOAvis proxyDataAvis = null;
			IDAOEmprunt proxyDataEmp = null;
			
			try {
				
				proxyDataAvis = (IDAOAvis)ctx.lookup("java:global/ESharingPhase1/DAOAvis!fr.afcepf.ai89.esharing.data.IDAOAvis");
				proxyDataEmp = (IDAOEmprunt)ctx.lookup("java:global/ESharingPhase1/DAOEmprunt!fr.afcepf.ai89.esharing.data.IDAOEmprunt");
				
			}
			catch (Exception e) {
				
				proxyDataAvis = (IDAOAvis)ctx.lookup("ESharingPhase1/DAOAvis!fr.afcepf.ai89.esharing.data.IDAOAvis");
				proxyDataEmp = (IDAOEmprunt)ctx.lookup("ESharingPhase1/DAOEmprunt!fr.afcepf.ai89.esharing.data.IDAOEmprunt");
				
			}
			
			listeEmprunts = proxyDataEmp.getEmprunts(prop);
			
			for (Emprunt e : listeEmprunts) {
				
				Avis cetAvis = proxyDataAvis.getAvis(e.getAvisSurEmprunteur().getIdAvis());
				listeAvis.add(cetAvis);
				
			}
		
		}
		catch(NamingException e) {
			
			e.printStackTrace();
			
		}
		
		return listeAvis;
	
	}

}
